﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using negocios;
using objetos;
using publico;
using System.Data;
using System.Transactions;

namespace softsales.pagina.ordem_servico
{

    public partial class ordem_servico_fechar : System.Web.UI.Page
    {
        // ORDEM SERVICO
        OBJ_TB_ORDEM_SERVICO o_tb_ordem_servico = new OBJ_TB_ORDEM_SERVICO();
        BLL_TB_ORDEM_SERVICO b_tb_ordem_servico = new BLL_TB_ORDEM_SERVICO();

        // ORDEM SERVICO ITEM
        OBJ_TB_ORDEM_SERVICO_ITEM o_tb_ordem_servico_item = new OBJ_TB_ORDEM_SERVICO_ITEM();
        BLL_TB_ORDEM_SERVICO_ITEM b_tb_ordem_servico_item = new BLL_TB_ORDEM_SERVICO_ITEM();     

        // ORDEM SERVICO HISTORICO
        OBJ_TB_ORDEM_SERVICO_HISTORICO o_tb_ordem_servico_historico = new OBJ_TB_ORDEM_SERVICO_HISTORICO();
        BLL_TB_ORDEM_SERVICO_HISTORICO b_tb_ordem_servico_historico = new BLL_TB_ORDEM_SERVICO_HISTORICO();

        OBJ_TB_TIPO_ORDEM_SERVICO o_tb_tipo_ordem_servico = new OBJ_TB_TIPO_ORDEM_SERVICO();
        BLL_TB_TIPO_ORDEM_SERVICO b_tb_tipo_ordem_servico = new BLL_TB_TIPO_ORDEM_SERVICO();


        // VEICULO
        OBJ_TB_VEICULO o_tb_veiculo = new OBJ_TB_VEICULO();
        BLL_TB_VEICULO b_tb_veiculo = new BLL_TB_VEICULO();

        // EMPRESA
        OBJ_TB_EMPRESA o_tb_empresa = new OBJ_TB_EMPRESA();
        BLL_TB_EMPRESA b_tb_empresa = new BLL_TB_EMPRESA();


        BLL_TB_TIPO_SITUACAO_ORDEM_SERVICO b_tb_tipo_situacao_ordem_servico = new BLL_TB_TIPO_SITUACAO_ORDEM_SERVICO();


        BLL_TB_FORMA_PAGAMENTO b_tb_forma_pagamento = new BLL_TB_FORMA_PAGAMENTO();
        OBJ_TB_FORMA_PAGAMENTO o_tb_forma_pagamento = new OBJ_TB_FORMA_PAGAMENTO();

        // CONDICAO PAGAMENTO
        OBJ_TB_CONDICAO_PAGAMENTO o_tb_condicao_pagamento = new OBJ_TB_CONDICAO_PAGAMENTO();
        BLL_TB_CONDICAO_PAGAMENTO b_tb_condicao_pagamento = new BLL_TB_CONDICAO_PAGAMENTO();

        OBJ_TB_CONDICAO_PAGAMENTO_PRAZO o_tb_condicao_pagamento_prazo = new OBJ_TB_CONDICAO_PAGAMENTO_PRAZO();
        BLL_TB_CONDICAO_PAGAMENTO_PRAZO b_tb_condicao_pagamento_prazo = new BLL_TB_CONDICAO_PAGAMENTO_PRAZO();

        BLL_TB_VEICULO_MARCA b_tb_veiculo_marca = new BLL_TB_VEICULO_MARCA();
        BLL_TB_VEICULO_MODELO b_tb_veiculo_modelo = new BLL_TB_VEICULO_MODELO();


        // PRODUTO 
        BLL_TB_PRODUTO b_tb_produto = new BLL_TB_PRODUTO();
        OBJ_TB_PRODUTO o_tb_produto = new OBJ_TB_PRODUTO();

        // CADASTRO
        OBJ_TB_CADASTRO o_tb_cadastro = new OBJ_TB_CADASTRO();
        BLL_TB_CADASTRO b_tb_cadastro = new BLL_TB_CADASTRO();

        // ORCAMENTO
        OBJ_TB_ORCAMENTO o_tb_orcamento = new OBJ_TB_ORCAMENTO();
        BLL_TB_ORCAMENTO b_tb_orcamento = new BLL_TB_ORCAMENTO();

        // ORCAMENTO ITEM
        OBJ_TB_ORCAMENTO_ITEM o_tb_orcamento_item = new OBJ_TB_ORCAMENTO_ITEM();
        BLL_TB_ORCAMENTO_ITEM b_tb_orcamento_item = new BLL_TB_ORCAMENTO_ITEM();


        // CONTA RECEBER
        OBJ_TB_CONTA_RECEBER o_tb_conta_receber = new OBJ_TB_CONTA_RECEBER();
        BLL_TB_CONTA_RECEBER b_tb_conta_receber = new BLL_TB_CONTA_RECEBER();
       
        // BANCO CONTA CORRENTE
        OBJ_TB_BANCO_CONTA_CORRENTE o_tb_banco_conta_corrente = new OBJ_TB_BANCO_CONTA_CORRENTE();
        BLL_TB_BANCO_CONTA_CORRENTE b_tb_banco_conta_corrente = new BLL_TB_BANCO_CONTA_CORRENTE();

        // CONTA CONTABIL
        OBJ_TB_CONTA_CONTABIL o_tb_conta_contabil = new OBJ_TB_CONTA_CONTABIL();
        BLL_TB_CONTA_CONTABIL b_tb_conta_contabil = new BLL_TB_CONTA_CONTABIL();

        // CENTRO DE CUSTO
        OBJ_TB_CENTRO_CUSTO o_tb_centro_custo = new OBJ_TB_CENTRO_CUSTO();
        BLL_TB_CENTRO_CUSTO b_tb_centro_custo = new BLL_TB_CENTRO_CUSTO();

    
        // ORDEM SERVICO VEICULO
        OBJ_TB_ORDEM_SERVICO_VEICULO o_tb_ordem_servico_veiculo = new OBJ_TB_ORDEM_SERVICO_VEICULO();
        BLL_TB_ORDEM_SERVICO_VEICULO b_tb_ordem_servico_veiculo = new BLL_TB_ORDEM_SERVICO_VEICULO();

        // CONTA RECEBER ORDEM SERVICO
        BLL_TB_CONTA_RECEBER_ORDEM_SERVICO b_tb_conta_receber_ordem_servico = new BLL_TB_CONTA_RECEBER_ORDEM_SERVICO();
        OBJ_TB_CONTA_RECEBER_ORDEM_SERVICO o_tb_conta_receber_ordem_servico = new OBJ_TB_CONTA_RECEBER_ORDEM_SERVICO();


        // LOG ERRO
        BLL_TB_LOG_ERRO b_tb_log_erro = new BLL_TB_LOG_ERRO();


        OBJ_TB_CAIXA o_tb_caixa = new OBJ_TB_CAIXA();
        BLL_TB_CAIXA b_tb_caixa = new BLL_TB_CAIXA();


        private int id_conta_receber { get; set; }
        private int id_conta_pagar { get; set; }
        private int id_empresa { get; set; }
        private int id_ordem_servico { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {

            if (PUB_SESSAO.Logado())
            {
                if (!IsPostBack)
                {

                    // PREENCHE DROPDOWNLIST

                    b_tb_empresa.PreencheControleWeb(DDL_ID_EMPRESA, true);
                    b_tb_tipo_situacao_ordem_servico.PreencheControle(DDL_ID_SITUACAO_ORDEM_SERVICO, true);
                    b_tb_tipo_ordem_servico.PreencheControle(DDL_ID_TIPO_ORDEM_SERVICO, true);
                    b_tb_forma_pagamento.PreencheControle(DDL_ID_FORMA_PAGAMENTO, false);                                                   
                    b_tb_centro_custo.PreencheControle(DDL_ID_CENTRO_CUSTO, true);
                    b_tb_banco_conta_corrente.PreencheControle(DDL_ID_BANCO_CONTA_CORRENTE, true);
                    b_tb_conta_contabil.PreencheControle(DDL_ID_CONTA_CONTABIL, true);

                    // INICIALIZA CAMPO DT EMISSAO COM A DATA ATUAL
                    TXT_DT_EMISSAO.Text = DateTime.Now.ToShortDateString();

                    // INCLUI O TITULO NA PAGINA
                    LBL_TITULO_PAGINA.Text = "Fechar Ordem Serviço";


                    // INICIALIZA TEXTBOX COM VALORES INICIAIS
                    TXT_QTD.Text = "1";
                    TXT_VALOR_UNITARIO.Text = "0,00";

                    TXT_VALOR_DESCONTO.Text = "0,00";
                    TXT_VALOR_OUTRO.Text = "0,00";
 

                    TXT_VALOR_TOTAL_DESCONTO.Text = "0,00";
                    TXT_VALOR_TOTAL_DESCONTO.ReadOnly = true;

                    TXT_VALOR_TOTAL_ITEM.Text = "0,00";
                    TXT_VALOR_TOTAL_ITEM.ReadOnly = true;

                    TXT_VALOR_TOTAL_ORDEM_SERVICO.Text = "0,00";
                    TXT_VALOR_TOTAL_ORDEM_SERVICO.ReadOnly = true;

                    TXT_VALOR_TOTAL_OUTRO.Text = "0,00";
                    TXT_VALOR_TOTAL_OUTRO.ReadOnly = true;

                    TXT_VALOR_TOTAL_PRODUTO.Text = "0,00";
                    TXT_VALOR_TOTAL_PRODUTO.ReadOnly = true;
 

                    TXT_VALOR_TOTAL_SERVICO.Text = "0,00";
                    TXT_VALOR_TOTAL_SERVICO.ReadOnly = true;
 

           

                    // LIMPA O DATA TABLE DT ORDEM DE SERVICO
                    b_tb_ordem_servico_item.Dt_ordem_servico_item.Clear();


                    // PAINEL INICIAL DE ITEM OCULTO
     
                    if (Request["id"] != null)
                    {
                        if (PUB_FUNCOES.ApenasInteiro(Request["id"].ToString()))
                        {
                            Editar(Request["id"].ToString());
                        }
                        
                        
                    }


                }
                else
                {
                    if (Session["id_produto"] != null)
                    {                         

                        int id_produto = Convert.ToInt32(Session["id_produto"].ToString());
                        o_tb_produto = b_tb_produto.SelecionarObjetoPorId(id_produto);

                        TXT_ID_PRODUTO_SERVICO.Text = o_tb_produto.id.ToString();
                        TXT_DESCRICAO.Text = o_tb_produto.descricao.ToString();
                        TXT_VALOR_UNITARIO.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto.valor_venda.ToString());
                        TXT_VALOR_TOTAL_ITEM.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto.valor_venda.ToString());
                        TXT_QTD.Text = "1";
                        TXT_VALOR_OUTRO.Text = "0,00";
                        TXT_VALOR_DESCONTO.Text = "0,00";                      
                        Session.Remove("id_produto");
                    }

                    // RECEBE O ID_CADASTRO DA MODAL CADASTRO
                    if (Session["id_cadastro"] != null)
                    {
                        int id_cadastro = Convert.ToInt32(Session["id_cadastro"].ToString());

                        PreencheDadosCadastro(id_cadastro);

                        Session.Remove("id_cadastro");           

                    }


                    // RECEBE O ID_CADASTRO DA MODAL CADASTRO
                    if (Session["id_orcamento"] != null)
                    {
                        int id_orcamento = Convert.ToInt32(Session["id_orcamento"]);

                        o_tb_orcamento = b_tb_orcamento.SelecionarObjetoPorId(id_orcamento);

                        PreencheDadosOrcamento(o_tb_orcamento);

                        Session.Remove("id_orcamento");

                    }
                }
            }

        }

        private void PreencheDadosEmpresa(int id_empresa)
        {
            o_tb_empresa = b_tb_empresa.SelecionarObjetoPorId(id_empresa);


            DDL_ID_EMPRESA.SelectedValue = o_tb_empresa.id.ToString();
        }


        private void PreencheDadosOrcamento(OBJ_TB_ORCAMENTO obj_tb_orcamento)
        {
            try
            {
      
                b_tb_ordem_servico_item.ImportarItemsDoOrcamento(obj_tb_orcamento.id);

                // PREENCHE CAMPOS DA EMPRESA
                PreencheDadosEmpresa(obj_tb_orcamento.id_empresa);

                // PREENCHE CAMPOS DO CADASTRO
                PreencheDadosCadastro(obj_tb_orcamento.id_cadastro);
              
                GRV_TB_ORDEM_SERVICO_ITEM.DataSource = b_tb_ordem_servico_item.Dt_ordem_servico_item;
                GRV_TB_ORDEM_SERVICO_ITEM.DataBind();

 
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {

            }


        }

   
 


        private void PreencheDadosCadastro(int id_cadastro)
        {
            o_tb_cadastro = b_tb_cadastro.SelecionarObjetoPorId(id_cadastro);

            // CLIENTE

            TXT_ID_CLI_FOR.Text = o_tb_cadastro.id.ToString();
            TXT_NOME_CLI_FOR.Text = o_tb_cadastro.nome.ToString();
      
        }

        private void Editar(string id)
        {



            try
            {

                // Seleciona a ordem de servico  e carrega o objeto
                o_tb_ordem_servico = b_tb_ordem_servico.SelecionarObjetoPorId(Convert.ToInt32(id));

                HF_ID.Value = o_tb_ordem_servico.id.ToString();

                if (o_tb_ordem_servico != null)
                {
                    o_tb_empresa = b_tb_empresa.SelecionarObjetoPorId(o_tb_ordem_servico.id_empresa);
                    o_tb_cadastro = b_tb_cadastro.SelecionarObjetoPorId(o_tb_ordem_servico.id_cadastro);                    

                }

                TXT_NUM_OS.Text = o_tb_ordem_servico.id.ToString();
                TXT_NUM_OS.Enabled = false;

                DDL_ID_EMPRESA.SelectedValue = o_tb_ordem_servico.id_empresa.ToString();
                DDL_ID_EMPRESA.Enabled = false;

                TXT_ID_OS_GARANTIA.Text = o_tb_ordem_servico.id_os_garantia.ToString();
                TXT_ID_OS_GARANTIA.Enabled = false;

                DDL_ID_TIPO_ORDEM_SERVICO.SelectedValue =  o_tb_ordem_servico.id_tipo_ordem_servico.ToString();
                DDL_ID_TIPO_ORDEM_SERVICO.Enabled = false;

                DDL_ID_SITUACAO_ORDEM_SERVICO.SelectedValue = o_tb_ordem_servico.id_situacao_ordem_servico.ToString();

                TXT_DT_EMISSAO.Text = PUB_FUNCOES.FormataDataBR(o_tb_ordem_servico.dt_emissao.ToString());
                TXT_DT_EMISSAO.Enabled = false;

                TXT_DT_ENTRADA.Text = PUB_FUNCOES.FormataDataBR(o_tb_ordem_servico.dt_entrada.ToString());
                TXT_DT_ENTREGA.Text = PUB_FUNCOES.FormataDataBR(o_tb_ordem_servico.dt_entrega.ToString());
                TXT_DT_APROVACAO.Text = PUB_FUNCOES.FormataDataBR(o_tb_ordem_servico.dt_aprovacao.ToString());
                TXT_DT_GARANTIA.Text = PUB_FUNCOES.FormataDataBR(o_tb_ordem_servico.dt_garantia.ToString());
                TXT_DT_FECHAMENTO.Text = PUB_FUNCOES.FormataDataBR(o_tb_ordem_servico.dt_fechamento.ToString());

                // CLIENTE
                TXT_ID_CLI_FOR.Text = o_tb_ordem_servico.id_cadastro.ToString();
                TXT_NOME_CLI_FOR.Text = o_tb_cadastro.nome.ToString();
     

                // DESCRICAO           
                TXT_DESC_SERVICO.Text = o_tb_ordem_servico.desc_servico.ToString();


                // PAGAMENTO
                DDL_ID_FORMA_PAGAMENTO.SelectedValue = o_tb_ordem_servico.id_forma_pagamento.ToString();

                // PRENCHE CONTROLE CONDICAO PAGAMENTO DE ACORDO COM A FORMA DE PAGAMENTO
                b_tb_condicao_pagamento.PreencheControleWeb(DDL_ID_CONDICAO_PAGAMENTO, string.Format("tb_condicao_pagamento.id_forma_pagamento={0}", o_tb_ordem_servico.id_forma_pagamento),"",false);

                // SELECIONA A CONDICAO DE PAGAMENTO
                DDL_ID_CONDICAO_PAGAMENTO.SelectedValue = o_tb_ordem_servico.id_condicao_pagamento.ToString();
             

                TXT_VALOR_TOTAL_DESCONTO.Text = PUB_FUNCOES.FormataNumerico(o_tb_ordem_servico.valor_total_desconto.ToString());
                TXT_VALOR_TOTAL_ORDEM_SERVICO.Text = PUB_FUNCOES.FormataNumerico(o_tb_ordem_servico.valor_total_ordem_servico.ToString());
                TXT_VALOR_TOTAL_OUTRO.Text = PUB_FUNCOES.FormataNumerico(o_tb_ordem_servico.valor_total_outro.ToString());
                TXT_VALOR_TOTAL_PRODUTO.Text = PUB_FUNCOES.FormataNumerico(o_tb_ordem_servico.valor_total_produto.ToString());
                TXT_VALOR_TOTAL_SERVICO.Text = PUB_FUNCOES.FormataNumerico(o_tb_ordem_servico.valor_total_servico.ToString());                


                TXT_VALOR_PARCELA.Text = PUB_FUNCOES.FormataNumerico(o_tb_ordem_servico.valor_total_ordem_servico.ToString());
                TXT_VALOR_SALDO.Text = PUB_FUNCOES.FormataNumerico(o_tb_ordem_servico.valor_total_ordem_servico.ToString());
                
                PreencheOrdemServicoItem();
                       
                DesabilitaControle();

                TXT_DT_APROVACAO.Enabled = true;
                TXT_DT_ENTRADA.Enabled = true;
                TXT_DT_ENTREGA.Enabled = true;
                TXT_DT_GARANTIA.Enabled = true;
                TXT_DT_FECHAMENTO.Text = DateTime.Now.ToShortDateString();                

            }
            catch (Exception)
            {

                throw;
            }


        }

        private void DesabilitaControle()
        {
         
            DDL_ID_EMPRESA.Enabled = false;         
            DDL_ID_SITUACAO_ORDEM_SERVICO.Enabled = false;

            TXT_NUM_OS.Enabled = false;
            TXT_DT_EMISSAO.Enabled = false;
            TXT_DT_FECHAMENTO.Enabled = false;
            TXT_ID_CLI_FOR.Enabled = false;
            TXT_NOME_CLI_FOR.Enabled = false;
        
            TXT_VALOR_TOTAL_ORDEM_SERVICO.Enabled = false;
            TXT_VALOR_TOTAL_OUTRO.Enabled = false;
            TXT_VALOR_TOTAL_PRODUTO.Enabled = false;
            TXT_VALOR_TOTAL_SERVICO.Enabled = false;
            TXT_VALOR_SALDO.Enabled = false;
        
            
                 
        }
        

  


      

        private void PreencheOrdemServicoItem()
        {
            try
            {

                GRV_TB_ORDEM_SERVICO_ITEM.DataSource = b_tb_ordem_servico_item.Selecionar(string.Format("tb_ordem_servico_item.id_ordem_servico = {0}", HF_ID.Value), "");
                GRV_TB_ORDEM_SERVICO_ITEM.DataBind();


            }
            catch (Exception)
            {
                
                throw;
            }


        }

        private void PreencheFinanceiro()
        {
            try
            {
                GRV_TB_FINANCEIRO.DataSource = b_tb_conta_receber.Dt_conta_receber;
                GRV_TB_FINANCEIRO.DataBind();

            }
            catch (Exception)
            {
                
                throw;
            }
        }

        private void AlterarOrdemServico()
        {
            try
            {
                o_tb_ordem_servico.id = Convert.ToInt32(HF_ID.Value);
                o_tb_ordem_servico.id_empresa = Convert.ToInt32(DDL_ID_EMPRESA.SelectedValue);
                o_tb_ordem_servico.id_cadastro = Convert.ToInt32(TXT_ID_CLI_FOR.Text);
                if (TXT_DT_EMISSAO.Text != string.Empty)
                    o_tb_ordem_servico.dt_emissao = Convert.ToDateTime(TXT_DT_EMISSAO.Text);
                if (TXT_DT_ENTRADA.Text != string.Empty)
                    o_tb_ordem_servico.dt_entrada = Convert.ToDateTime(PUB_FUNCOES.TrataData(TXT_DT_ENTRADA.Text));
                if (TXT_DT_ENTREGA.Text != string.Empty)
                    o_tb_ordem_servico.dt_entrega = Convert.ToDateTime(PUB_FUNCOES.TrataData(TXT_DT_ENTREGA.Text));
                if (TXT_DT_APROVACAO.Text != string.Empty)
                    o_tb_ordem_servico.dt_aprovacao = Convert.ToDateTime(PUB_FUNCOES.TrataData(TXT_DT_APROVACAO.Text));
                if (TXT_DT_FECHAMENTO.Text != string.Empty)
                    o_tb_ordem_servico.dt_fechamento = Convert.ToDateTime(PUB_FUNCOES.TrataData(TXT_DT_FECHAMENTO.Text));

                if (TXT_DT_GARANTIA.Text != string.Empty)
                    o_tb_ordem_servico.dt_garantia = Convert.ToDateTime(PUB_FUNCOES.TrataData(TXT_DT_GARANTIA.Text));

                if (TXT_ID_OS_GARANTIA.Text != string.Empty)
                    o_tb_ordem_servico.id_os_garantia = Convert.ToInt32(PUB_FUNCOES.TrataInteiro(TXT_ID_OS_GARANTIA.Text));

                if (TXT_NUM_OS.Text != string.Empty)
                    o_tb_ordem_servico.id_orcamento = Convert.ToInt32(PUB_FUNCOES.TrataInteiro(TXT_NUM_OS.Text));

                if (TXT_NUM_OS.Text != string.Empty)
                    o_tb_ordem_servico.id_nfs = Convert.ToInt32(PUB_FUNCOES.TrataInteiro(TXT_NUM_OS.Text));

                if (TXT_PLACA.Text != string.Empty)
                    o_tb_ordem_servico.veiculo_placa = TXT_PLACA.Text;

                if (TXT_KM.Text != string.Empty)
                    o_tb_ordem_servico.veiculo_km = TXT_KM.Text;


                o_tb_ordem_servico.id_forma_pagamento = Convert.ToInt32(DDL_ID_FORMA_PAGAMENTO.SelectedValue);
                o_tb_ordem_servico.id_condicao_pagamento = Convert.ToInt32(DDL_ID_CONDICAO_PAGAMENTO.SelectedValue);
                o_tb_ordem_servico.id_usuario = PUB_SESSAO.Id;
                o_tb_ordem_servico.id_tipo_ordem_servico = Convert.ToInt32(DDL_ID_TIPO_ORDEM_SERVICO.SelectedValue);
                o_tb_ordem_servico.id_situacao_ordem_servico = Convert.ToInt32(DDL_ID_SITUACAO_ORDEM_SERVICO.SelectedValue);
                o_tb_ordem_servico.desc_servico = TXT_DESC_SERVICO.Text.Trim();
                o_tb_ordem_servico.valor_total_servico = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_SERVICO.Text));
                o_tb_ordem_servico.valor_total_produto = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_PRODUTO.Text));
                o_tb_ordem_servico.valor_total_desconto = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_DESCONTO.Text));
                o_tb_ordem_servico.valor_total_outro = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_OUTRO.Text));
                o_tb_ordem_servico.valor_total_ordem_servico = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_ORDEM_SERVICO.Text));
                o_tb_ordem_servico.id_usuario_checkin = null;
                o_tb_ordem_servico.dt_checkin = null;

                b_tb_ordem_servico.Alterar(o_tb_ordem_servico);


            }
            catch (Exception)
            {
                
                throw;
            }

        }

        protected void BTN_SALVAR_Click(object sender, EventArgs e)
        {

            
            string msg = string.Empty;
            try
            {
                

                if (TXT_ID_CLI_FOR.Text != string.Empty && TXT_NOME_CLI_FOR.Text != string.Empty
                    && DDL_ID_EMPRESA.SelectedValue != string.Empty  )
                {
                    id_ordem_servico = Convert.ToInt32(HF_ID.Value);
                    id_empresa = Convert.ToInt32(DDL_ID_EMPRESA.SelectedValue);
                    using (TransactionScope scope = new TransactionScope())
                    {
                        AlterarOrdemServico();
                                               
                       // CONTA RECEBER
                        foreach (DataRow dr in b_tb_conta_receber.Dt_conta_receber.Rows)
                        {

                            o_tb_conta_receber = new OBJ_TB_CONTA_RECEBER();
                            o_tb_conta_receber.id_empresa = Convert.ToInt32(dr["id_empresa"].ToString());
                            o_tb_conta_receber.id_conta_contabil = Convert.ToInt32(dr["id_conta_contabil"].ToString());
                            o_tb_conta_receber.id_tipo_especie = null;
                            o_tb_conta_receber.id_banco_conta_corrente = Convert.ToInt32(dr["id_banco_conta_corrente"].ToString());
                            o_tb_conta_receber.id_cadastro = Convert.ToInt32(dr["id_cadastro"].ToString());
                            o_tb_conta_receber.id_centro_custo = Convert.ToInt32(dr["id_centro_custo"].ToString());
                            o_tb_conta_receber.documento = dr["documento"].ToString();
                            o_tb_conta_receber.descricao = dr["descricao"].ToString();
                            o_tb_conta_receber.parcela = Convert.ToInt32(dr["parcela"].ToString());
                            o_tb_conta_receber.valor_parcela = Convert.ToDecimal(dr["valor_parcela"].ToString());
                            o_tb_conta_receber.valor_desconto = Convert.ToDecimal(dr["valor_desconto"].ToString());
                            o_tb_conta_receber.valor_juro = Convert.ToDecimal(dr["valor_juro"].ToString());
                            o_tb_conta_receber.valor_multa = Convert.ToDecimal(dr["valor_multa"].ToString());
                            o_tb_conta_receber.valor_pago = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(dr["valor_pago"].ToString()));
                            o_tb_conta_receber.valor_total = Convert.ToDecimal(dr["valor_total"].ToString());
                            o_tb_conta_receber.valor_saldo = Convert.ToDecimal(dr["valor_saldo"].ToString());
                            o_tb_conta_receber.dias_atraso = Convert.ToInt32(dr["dias_atraso"].ToString());
                            o_tb_conta_receber.dt_emissao = Convert.ToDateTime(dr["dt_emissao"].ToString());
                            o_tb_conta_receber.dt_cartorio = null;
                            o_tb_conta_receber.dt_cancelamento = null;
                            o_tb_conta_receber.dias_atraso = 0;
                            o_tb_conta_receber.dt_vencimento = Convert.ToDateTime(dr["dt_vencimento"].ToString());
                            o_tb_conta_receber.dt_pagamento = dr["dt_pagamento"] == DBNull.Value ? (DateTime?)null : Convert.ToDateTime( dr["dt_pagamento"].ToString());
                            o_tb_conta_receber.id_tipo_situacao_financeira = Convert.ToInt32(dr["id_tipo_situacao_financeira"].ToString());
                            o_tb_conta_receber.sit_pago = Convert.ToBoolean(dr["sit_pago"].ToString());
                            id_conta_receber = b_tb_conta_receber.Incluir(o_tb_conta_receber);


                            o_tb_conta_receber_ordem_servico.id_conta_receber = id_conta_receber;
                            o_tb_conta_receber_ordem_servico.id_empresa = id_empresa;
                            o_tb_conta_receber_ordem_servico.id_ordem_servico = id_ordem_servico;
                            b_tb_conta_receber_ordem_servico.Incluir(o_tb_conta_receber_ordem_servico);


                        }


                        IncluirOrdemServicoHistorico(string.Format("Login {0} fechou a O.S", PUB_SESSAO.Login));

                        msg = "Ordem de Serviço Nº " + id_ordem_servico.ToString() + " foi incluído com sucesso";

                        Master.MSG_ALERTA(msg, "default.aspx", false);
                        PUB_FUNCOES.ResetForms(Page.Controls);

                        b_tb_conta_receber.Dt_conta_receber.Clear();

                        scope.Complete();

                    }



                }



            }
            catch (Exception ex)
            {
                b_tb_log_erro.IncluirLogErro(ex);
                msg = "Erro ao tentar salvar o ordem serviço detalhe do erro " + ex.Message;
                Master.MSG_ALERTA(msg);
            }


        }


        private void LimparItem()
        {
            TXT_ID_PRODUTO_SERVICO.Text = string.Empty;
            TXT_VALOR_UNITARIO.Text = "0,00";
            TXT_VALOR_DESCONTO.Text = "0,00";
            TXT_VALOR_OUTRO.Text = "0,00";
            TXT_VALOR_TOTAL_ITEM.Text = "0,00";
        
            TXT_DESCRICAO.Text = string.Empty;
            TXT_QTD.Text = "1";


        }

        private void IncluirOrdemServicoHistorico(string historico)
        {

            // ORDEM SERVICO USUARIO HISTORICO

            o_tb_ordem_servico_historico.id_ordem_servico = Convert.ToInt32(HF_ID.Value);
            o_tb_ordem_servico_historico.id_usuario = PUB_SESSAO.Id;
            o_tb_ordem_servico_historico.dt_atualizacao = DateTime.Now;
            o_tb_ordem_servico_historico.desc_ordem_servico_historico = historico;
            b_tb_ordem_servico_historico.Incluir(o_tb_ordem_servico_historico);


        }

        private void TotalOrdemServico()
        {
            o_tb_ordem_servico =  b_tb_ordem_servico.SelecionarObjetoPorId(Convert.ToInt32(HF_ID.Value));

            TXT_VALOR_TOTAL_DESCONTO.Text = PUB_FUNCOES.FormataNumerico(o_tb_ordem_servico.valor_total_desconto.ToString());
            TXT_VALOR_TOTAL_ORDEM_SERVICO.Text = PUB_FUNCOES.FormataNumerico(o_tb_ordem_servico.valor_total_ordem_servico.ToString());
            TXT_VALOR_TOTAL_OUTRO.Text = PUB_FUNCOES.FormataNumerico(o_tb_ordem_servico.valor_total_outro.ToString());            
            TXT_VALOR_TOTAL_PRODUTO.Text = PUB_FUNCOES.FormataNumerico(o_tb_ordem_servico.valor_total_produto.ToString());
            TXT_VALOR_TOTAL_SERVICO.Text = PUB_FUNCOES.FormataNumerico(o_tb_ordem_servico.valor_total_servico.ToString());


        }


        protected void BTN_CANCELAR_Click(object sender, EventArgs e)
        {
            Response.Redirect("default.aspx", false);
        }

        protected void BTN_INCLUIR_ITEM_Click(object sender, EventArgs e)
        {
            try
            {


                if (TXT_ID_PRODUTO_SERVICO.Text != string.Empty && TXT_DESCRICAO.Text != string.Empty)
                {
                    int id_ordem_servico = Convert.ToInt32(HF_ID.Value);
                    decimal vlr_unitario = 0;
                    decimal vlr_desconto = 0;
                    decimal vlr_outro = 0;
                    decimal vlr_total_item = 0;
                    decimal vlr_qtd = 0;                    
                    decimal vlr_seguro = 0;
                    decimal vlr_frete = 0;

                    o_tb_produto = b_tb_produto.SelecionarObjetoPorId(Convert.ToInt32(TXT_ID_PRODUTO_SERVICO.Text));


                    if (TXT_QTD.Text != string.Empty)
                        vlr_qtd = Convert.ToDecimal(TXT_QTD.Text);

                    // VALOR UNITARIO
                    vlr_unitario = Convert.ToDecimal(o_tb_produto.valor_venda);
                    

                    if (TXT_VALOR_OUTRO.Text != string.Empty)
                        vlr_outro = Convert.ToDecimal(TXT_VALOR_OUTRO.Text);

                    if (TXT_VALOR_DESCONTO.Text != string.Empty)
                        vlr_desconto = Convert.ToDecimal(TXT_VALOR_DESCONTO.Text);

                

                    vlr_total_item = PUB_CALCULA_VALORES.CalculoTotalItem(vlr_qtd, vlr_unitario,vlr_desconto, vlr_seguro, vlr_outro, vlr_frete);

                    // PASSO OS VALORES PARA O OBJETO
                    o_tb_ordem_servico_item.id_ordem_servico = id_ordem_servico;
                    o_tb_ordem_servico_item.id_produto_servico = o_tb_produto.id;
                    o_tb_ordem_servico_item.id_tipo_item = Convert.ToInt32(o_tb_produto.id_tipo_item);
                    o_tb_ordem_servico_item.ean = o_tb_produto.ean;
                    o_tb_ordem_servico_item.descricao = o_tb_produto.descricao.ToString();
                    o_tb_ordem_servico_item.id_unidade_medida = o_tb_produto.id_unidade_medida;
                    o_tb_ordem_servico_item.qtd = vlr_qtd;
                    o_tb_ordem_servico_item.valor_unitario = vlr_unitario;
                    o_tb_ordem_servico_item.valor_desconto = vlr_desconto;
              
                    o_tb_ordem_servico_item.valor_outro = vlr_outro;
                    o_tb_ordem_servico_item.valor_total = vlr_total_item;


                    // RETORNO TODOS OS ITEM QUE JA EXISTEM NA TABELA ORCAMENTO ITEM
                    List<int> item = b_tb_ordem_servico_item.ListaProdutos(id_ordem_servico);

                    if (item.Count > 0)
                    {

                        // VERIFICO SE O ITEM QUE ESTOU INCLUINDO JA EXISTE NA LISTA
                        if (item.Contains(o_tb_produto.id))
                        {
                            o_tb_ordem_servico_item.id_produto_servico = o_tb_produto.id;
                            b_tb_ordem_servico_item.Alterar(o_tb_ordem_servico_item);

                        }
                        else
                        {
                            // INCLUIR ITEM
                            b_tb_ordem_servico_item.Incluir(o_tb_ordem_servico_item);
                        }

                    }
                    else
                    {
                        b_tb_ordem_servico_item.Incluir(o_tb_ordem_servico_item);
                    }


                    PreencheOrdemServicoItem();

                    // Limpa campos
                    LimparItem();

               


                }



            }
            catch (Exception ex)
            {
                b_tb_log_erro.IncluirLogErro(ex);
                Master.MSG_ERRO("Erro ao tentar incluir o item ");
            }




        }

        

        protected void IMG_BTN_EXCLUIR_Click(object sender, ImageClickEventArgs e)
        {

        }

        protected void GRV_TB_ORDEM_SERVICO_ITEM_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {

        }

        protected void GRV_TB_ORDEM_SERVICO_ITEM_Sorting(object sender, GridViewSortEventArgs e)
        {

        }
 
        protected void DDL_ID_FORMA_PAGAMENTO_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (DDL_ID_FORMA_PAGAMENTO.SelectedValue != string.Empty)
                {

                    int id_forma_pagamento = Convert.ToInt32(DDL_ID_FORMA_PAGAMENTO.SelectedValue);


                    if (Equals(id_forma_pagamento, (int)PUB_ENUM.FORMA_PAGAMENTO.AVISTA))
                    {
                        b_tb_conta_contabil.PreencheControle(DDL_ID_CONTA_CONTABIL, "desc_conta_contabil like '%caixa%'", "", false);
                    }

                    b_tb_condicao_pagamento.PreencheControleWeb(DDL_ID_CONDICAO_PAGAMENTO, string.Format("id_forma_pagamento = {0}", DDL_ID_FORMA_PAGAMENTO.SelectedValue), "", false);



                }
            }
            catch (Exception ex)
            {
                b_tb_log_erro.IncluirLogErro(ex);
                Master.MSG_ALERTA("Erro ao tentar selecionar a forma de pagamento.");
            }

        }
        

        private void IncluirContaReceber()
        {
            try
            {

                if (Convert.ToDecimal(TXT_VALOR_SALDO.Text) > 0 && DDL_ID_FORMA_PAGAMENTO.SelectedValue != string.Empty && DDL_ID_CONDICAO_PAGAMENTO.SelectedValue != string.Empty)
                {

                    int id_empresa = Convert.ToInt32(DDL_ID_EMPRESA.SelectedValue);
                    int id_cadastro = Convert.ToInt32(TXT_ID_CLI_FOR.Text);
                    int id_conta_contabil = Convert.ToInt32(DDL_ID_CONTA_CONTABIL.SelectedValue);
                    int id_condicao_pagamento = Convert.ToInt32(DDL_ID_CONDICAO_PAGAMENTO.SelectedValue);
                    int id_banco_conta_corrente = Convert.ToInt32(DDL_ID_BANCO_CONTA_CORRENTE.SelectedValue);
                    int id_centro_custo = Convert.ToInt32(DDL_ID_CENTRO_CUSTO.SelectedValue);
                    string documento = string.Empty;
                    string descricao = string.Empty;
                    decimal valor_parcela = Convert.ToDecimal(TXT_VALOR_PARCELA.Text);
                    int id_ordem_servico = Convert.ToInt32(HF_ID.Value);
                    int id_forma_pagamento = Convert.ToInt32(DDL_ID_FORMA_PAGAMENTO.SelectedValue);
                    decimal valor_total_ordem_servico = Convert.ToDecimal(TXT_VALOR_TOTAL_ORDEM_SERVICO.Text);
                    decimal valor_lancado = 0;


                    valor_parcela = Convert.ToDecimal(TXT_VALOR_PARCELA.Text);


                    List<int> lista_prazo = b_tb_condicao_pagamento_prazo.ListaPrazo(id_condicao_pagamento);


                    o_tb_conta_receber.dias_atraso = 0;
                    o_tb_conta_receber.documento = id_ordem_servico.ToString();
                    o_tb_conta_receber.dt_cancelamento = null;
                    o_tb_conta_receber.dt_cartorio = null;
                    o_tb_conta_receber.dt_emissao = DateTime.Now;
                    o_tb_conta_receber.id_banco_conta_corrente = id_banco_conta_corrente;
                    o_tb_conta_receber.id_centro_custo = id_centro_custo;
                    o_tb_conta_receber.id_tipo_especie = 0;
                    o_tb_conta_receber.id_conta_contabil = id_conta_contabil;
                    o_tb_conta_receber.id_controle = 0;
                    o_tb_conta_receber.id_empresa = id_empresa;
                    o_tb_conta_receber.id_cadastro = id_cadastro;
                    o_tb_conta_receber.valor_desconto = 0;
                    o_tb_conta_receber.valor_juro = 0;
                    o_tb_conta_receber.valor_multa = 0;



                    if (Equals(id_forma_pagamento, (int)PUB_ENUM.FORMA_PAGAMENTO.AVISTA))
                    {
                        o_tb_conta_receber.sit_pago = true;
                        o_tb_conta_receber.parcela = 0;
                        o_tb_conta_receber.dt_vencimento = DateTime.Now;
                        o_tb_conta_receber.dt_pagamento = DateTime.Now;
                        o_tb_conta_receber.valor_pago = Convert.ToDecimal(TXT_VALOR_PARCELA.Text);
                        o_tb_conta_receber.valor_parcela = Convert.ToDecimal(TXT_VALOR_PARCELA.Text);
                        o_tb_conta_receber.valor_saldo = valor_total_ordem_servico - valor_parcela;
                        o_tb_conta_receber.valor_total = Convert.ToDecimal(TXT_VALOR_PARCELA.Text);
                        o_tb_conta_receber.descricao = string.Format("Lançamento Ref. O.S Nº {0}", id_ordem_servico);
                        o_tb_conta_receber.id_tipo_situacao_financeira = (int)PUB_ENUM.TIPO_SITUACAO_FINANCEIRA.PAGO;
                        b_tb_conta_receber.PreencheDataTable(b_tb_conta_receber.Dt_conta_receber, o_tb_conta_receber);


                    }
                    else
                    {

                        var obj = b_tb_conta_receber.Dt_conta_receber.Compute("SUM(valor_parcela)", "");
                        if (obj != null)
                        {
                            valor_lancado = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(obj.ToString()));
                        }
                        // divide o valor das parcelas
                        valor_parcela = valor_total_ordem_servico - valor_lancado;
                        valor_parcela = valor_parcela / lista_prazo.Count;

                        for (int i = 1; i <= lista_prazo.Count ; i++)
                        {
                            o_tb_conta_receber.sit_pago = false;
                            o_tb_conta_receber.parcela = i ;
                            o_tb_conta_receber.valor_pago = 0;
                            o_tb_conta_receber.valor_parcela = valor_parcela;
                            o_tb_conta_receber.valor_saldo = valor_parcela;
                            o_tb_conta_receber.valor_total = valor_parcela;
                            o_tb_conta_receber.dt_vencimento = DateTime.Now.AddDays(lista_prazo[i]);
                            o_tb_conta_receber.dt_pagamento = null;
                            o_tb_conta_receber.id_tipo_situacao_financeira = (int)PUB_ENUM.TIPO_SITUACAO_FINANCEIRA.ABERTO;
                            o_tb_conta_receber.descricao = string.Format("Lançamento Ref. O.S Nº {0}, Parcela Nº {1} de {2}", id_ordem_servico, o_tb_conta_receber.parcela, i);
                            b_tb_conta_receber.PreencheDataTable(b_tb_conta_receber.Dt_conta_receber, o_tb_conta_receber);

                        }


                    }
                 
                    TXT_VALOR_SALDO.Text = PUB_FUNCOES.FormataNumerico((valor_total_ordem_servico - TotalLancado()).ToString());
                    TXT_VALOR_PARCELA.Text = PUB_FUNCOES.FormataNumerico((valor_total_ordem_servico - TotalLancado()).ToString());
                }
                else
                {
                    Master.MSG_ALERTA("O valor do saldo precisa ser maior que zero para fazer os lançamentos.");
                }




            }
            catch (Exception ex)
            {

                b_tb_log_erro.IncluirLogErro(ex);
                Master.MSG_ALERTA("Erro ao tentar fazer os lançamentos das parcelas.");
            }

        }
        protected void BTN_INCLUIR_PAGAMENTO_Click(object sender, EventArgs e)
        {
            try
            {
                IncluirContaReceber();
                PreencheFinanceiro();
            }
            catch (Exception)
            {
                
                throw;
            }
          
        }

        private decimal TotalLancado()
        {
            decimal valor_lancado = 0 ;
            var obj = b_tb_conta_receber.Dt_conta_receber.Compute("SUM(valor_parcela)", "");

            if (obj != null)
            {
                valor_lancado = Convert.ToDecimal(obj.ToString());
            }
            return valor_lancado;
        }

        protected void DDL_ID_CENTRO_CUSTO_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (DDL_ID_CENTRO_CUSTO.SelectedValue != string.Empty)
            {

                b_tb_conta_contabil.PreencheControle(DDL_ID_CONTA_CONTABIL,string.Format("tb_conta_contabil.id in (SELECT id_conta_contabil FROM tb_centro_custo_conta_contabil WHERE id_centro_custo = {0})",DDL_ID_CENTRO_CUSTO.SelectedValue),"",false);

                if (DDL_ID_CONTA_CONTABIL.Items.Count == 0)
                {
                    Master.MSG_ALERTA("Erro ao tentar preencher o campo conta contábil, verifique o cadastro da relação de centro de custo x conta contabil.");
                }

            }
        }

        protected void IMG_BTN_EXCLUIR_PAGAMENTO_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                ImageButton btn = (ImageButton)sender;

                int id_financeiro = 0;
                if (btn != null)
                {
                    id_financeiro = Convert.ToInt32(btn.CommandArgument);

                    if (b_tb_conta_receber.Dt_conta_receber.Rows.Count > 0)
                    {
                        b_tb_conta_receber.Dt_conta_receber.Rows[id_financeiro].Delete();
                        b_tb_conta_receber.Dt_conta_receber.AcceptChanges();                        
                    }

                    PreencheFinanceiro();
                    
                }
            }
            catch (Exception)
            {
                
                throw;
            }
        }   

  
    }
}